package org.villacoapa.censo.web.xml.facade;

import java.util.ArrayList;

import org.apache.log4j.Logger;
import org.hibernate.Transaction;
import org.villacoapa.censo.HibernateSessionFactory;
import org.villacoapa.censo.dao.AreaInteres;
import org.villacoapa.censo.dao.AreaInteresDAO;
import org.villacoapa.censo.dao.Delegacion;
import org.villacoapa.censo.dao.DelegacionDAO;
import org.villacoapa.censo.dao.Departamento;
import org.villacoapa.censo.dao.DepartamentoDAO;
import org.villacoapa.censo.dao.Estado;
import org.villacoapa.censo.dao.EstadoCivil;
import org.villacoapa.censo.dao.EstadoCivilDAO;
import org.villacoapa.censo.dao.EstadoDAO;
import org.villacoapa.censo.dao.EstatusMiembro;
import org.villacoapa.censo.dao.EstatusMiembroDAO;
import org.villacoapa.censo.dao.Familia;
import org.villacoapa.censo.dao.FamiliaDAO;
import org.villacoapa.censo.dao.MiembroDAO;
import org.villacoapa.censo.dao.Ocupacion;
import org.villacoapa.censo.dao.OcupacionDAO;
import org.villacoapa.censo.dao.Padecimiento;
import org.villacoapa.censo.dao.PadecimientoDAO;
import org.villacoapa.censo.dao.PadecimientosMiembro;
import org.villacoapa.censo.dao.PadecimientosMiembroDAO;
import org.villacoapa.censo.dao.PosicionCargo;
import org.villacoapa.censo.dao.PosicionCargoDAO;
import org.villacoapa.censo.dao.Subarea;
import org.villacoapa.censo.dao.SubareaDAO;
import org.villacoapa.censo.dao.TemaInteres;
import org.villacoapa.censo.dao.TemaInteresDAO;
import org.villacoapa.censo.web.util.DTOUtil;
import org.villacoapa.censo.web.xml.parser.BeanToXml;
import org.villacoapa.censo.web.xml.parser.Parser;

public class QueriesFacade {
	
	private static Logger log = Logger.getLogger(QueriesFacade.class);
	
	
	public static String getAllEstados(){
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		EstadoDAO dao = new EstadoDAO();
		ArrayList<Estado> arResult = (ArrayList<Estado>)dao.findAll();
		tx.commit();
		return Parser.listToXml("Estados",DTOUtil.getEstadoDTOs(arResult));
	}
	
	public static String getAllEstadoCivil(){
		Transaction tx = HibernateSessionFactory.getSessionFactory().openStatelessSession().beginTransaction();
		EstadoCivilDAO dao = new EstadoCivilDAO();
		ArrayList<EstadoCivil> arResult = (ArrayList<EstadoCivil>)dao.findAll();
		tx.commit();
		return Parser.listToXml("EstadosCiviles",DTOUtil.getEstadoCivilDTOs(arResult));
	}
	
	public static String getAllDelegacion(){
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		DelegacionDAO dao = new DelegacionDAO();
		ArrayList<Delegacion> arResult = (ArrayList<Delegacion>)dao.findAll();
		tx.commit();
		return Parser.listToXml("Delegaciones",DTOUtil.getDelegacionDTOs(arResult));
	}
	
	public static String getAllPadecimiento(){
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		PadecimientosMiembroDAO dao = new PadecimientosMiembroDAO();
		ArrayList<PadecimientosMiembro> arResult = (ArrayList<PadecimientosMiembro>)dao.findAll();
		tx.commit();
		return Parser.listToXml("Padecimientos",DTOUtil.getPAdecimientoDTOs(arResult));
	}
	
	public static String getAllFamilia(){
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		FamiliaDAO dao = new FamiliaDAO();
		ArrayList<Familia> arResult = (ArrayList<Familia>)dao.findAll();
		tx.commit();
		return Parser.listToXml("Familias",DTOUtil.getFamailiaDTOs(arResult));
	}
	
	public static String getAllOcupacion(){
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		OcupacionDAO dao = new OcupacionDAO();
		ArrayList<Ocupacion> arResult = (ArrayList<Ocupacion>)dao.findAll();
		tx.commit();
		return Parser.listToXml("Ocupaciones",DTOUtil.getOcupacionDTOs(arResult));
	}
	
	public static String getAllAreaInteres(){
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		AreaInteresDAO dao = new AreaInteresDAO();
		ArrayList<AreaInteres> arResult = (ArrayList<AreaInteres>)dao.findAll();
		ArrayList arResult2 = new ArrayList<AreaInteres>();
		for(AreaInteres area:arResult){
			AreaInteres tmp = new AreaInteres();
			tmp.setIdAreaInteres(area.getIdAreaInteres());
			tmp.setDescripcion(area.getDescripcion());
			arResult2.add(tmp);
		}
		tx.commit();
		return Parser.listToXml("AreasInteres",arResult2);
	}
	
	@SuppressWarnings("unchecked")
	public static String getAllPosicionesCargo(){
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		PosicionCargoDAO dao = new PosicionCargoDAO();
		ArrayList<PosicionCargo> arResult = (ArrayList<PosicionCargo>)dao.findAll();
		ArrayList arResult2 = new ArrayList<PosicionCargo>();
		for (PosicionCargo posicionCargo : arResult) {
			PosicionCargo tmp = new PosicionCargo();
			tmp.setIdPosicion(posicionCargo.getIdPosicion());
			tmp.setNombre(posicionCargo.getNombre());
			arResult2.add(tmp);
		}
		tx.commit();
		return Parser.listToXml("PosicionesCargo",arResult2);
	}
	
	@SuppressWarnings("unchecked")
	public static String getAllDepartamentos(){
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		DepartamentoDAO dao = new DepartamentoDAO();
		ArrayList<Departamento> arResult = (ArrayList<Departamento>)dao.findAll();
		ArrayList arResult2 = new ArrayList<Departamento>();
		for (Departamento depto : arResult) {
			Departamento tmp = new Departamento();
			tmp.setIdDepartamento(depto.getIdDepartamento());
			tmp.setNombreDepartamento(depto.getNombreDepartamento());
			arResult2.add(tmp);
		}
		tx.commit();
		return Parser.listToXml("Departamentos",arResult2);
	}
	
	@SuppressWarnings("unchecked")
	public static String getAllEstatusMiembro(){
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		EstatusMiembroDAO dao = new EstatusMiembroDAO();
		ArrayList arResult = (ArrayList<EstatusMiembro>)dao.findAll();
		tx.commit();
		return Parser.listToXml("EstatusMiembro",arResult);
	}
	
	@SuppressWarnings("unchecked")
	public static String getAllTemasInteres(){
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		TemaInteresDAO dao = new TemaInteresDAO();
		ArrayList arResult = (ArrayList<TemaInteres>)dao.findAll();
		tx.commit();
		return Parser.listToXml("TemaInteres",arResult);
	}
	
	public static String getAllMiembrosMinimal(){
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		MiembroDAO dao = new MiembroDAO();
		ArrayList arResult = (ArrayList<TemaInteres>)dao.findAll();
		tx.commit();
		return Parser.listToXml("MiembrosMinimal",DTOUtil.getMiembrosMinimalDTOs(arResult));
	}
	
//	public static String getMiembroCompleto(){
//		
//		
//	}
	
	public static void main(String[] args) {
		System.out.println(getAllDepartamentos());
	}

}
